package threadlocal;

import java.util.HashMap;

/**
 * 描述：创建ThreadLocal变量，用于存储每个线程独立的HashMap副本
 */

public class ThreadLocalExample {
    // 创建ThreadLocal变量，用于存储每个线程独立的HashMap副本
    private static final ThreadLocal<HashMap<String, Integer>> threadLocalMap = new ThreadLocal<>();

    public static void main(String[] args) {
        // 创建三个线程，并让它们各自执行更新HashMap的操作
        for (int i = 0; i < 3; i++) {
            new Thread(() -> {
                // 为当前线程创建一个新的HashMap，并将其设置为ThreadLocal变量的值
                HashMap<String, Integer> map = new HashMap<>();
                map.put("count", 0);
                threadLocalMap.set(map);

                // 当前线程执行更新HashMap的操作
                for (int j = 0; j < 5; j++) {
                    incrementCount();
                }

                // 打印当前线程的HashMap副本
                System.out.println(Thread.currentThread().getName() + ": " + threadLocalMap.get());
            }, "Thread-" + i).start();
        }
    }

    // 更新当前线程的HashMap中的count值
    private static void incrementCount() {
        HashMap<String, Integer> map = threadLocalMap.get();
        map.put("count", map.get("count") + 1);
    }
}

